#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;


//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	int n = 5;
//	for (int i = 0; i < 1 << n; i++) {
//		vector<int> ok;
//		for (int j = 0; j < n; j++)
//		{
//			if (i & (1 << j)) {
//				ok.push_back(j + 1);
//			}
//		}
//		for (int j = 0; j < ok.size(); j++)
//		{
//			cout << ok[j] << ' ';
//		}
//		cout << '\n';
//	}
//	return 0;
//}

//int d[20], f[20];
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	for (int i = 1; i <= 20; i++) d[i] = d[i - 1] * 2 + 1,f[i]=1e9;
//	f[1] = 1;
//	for (int x = 2; x <= 20; x++) {
//		for (int i = 1; i < x; i++)
//		{
//			f[x]=min(2 * f[i] + d[x - i],f[x]);
//		}
//	}
//	return 0;
//}


const int N = 2e5 + 10;

int t, n, a[N];
bool dp[N];

//void solve() {
//	cin >> n;
//	for (int i = 1; i <= n; ++i)cin >> a[i];
//	memset(dp, 0, sizeof dp); dp[0] = 1;
//	for (int i = 1; i <= n; ++i) {
//		if (i + a[i] <= n)dp[i + a[i]] |= dp[i - 1];
//		if (i - a[i] - 1 >= 0)dp[i] |= dp[i - a[i] - 1];
//	}
//	if (dp[n])printf("YES\n");
//	else printf("NO\n");
//}

int main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> t;
	while (t--) {
		cin >> n;
		memset(dp, false, sizeof dp);
		dp[0] = 1;
		int a[200005];
		for (int i = 1; i <= n; i++) cin >> a[i];
		for (int i = 1; i <= n; i++)
		{
			if (i + a[i] <= n)dp[i + a[i]] |= dp[i - 1];
			if (i - a[i] - 1 >= 0)dp[i] |= dp[i - a[i] - 1];
		}
		if (dp[n]) cout << "YES" << '\n';
		else cout << "NO" << '\n';
	}
	return 0;
}

